package com.llb666.e.shop.domain.entity;

import com.llb666.e.shop.infracore.config.WXPayConfig;
import lombok.Data;

/**
 * 统一下单.
 *
 * @author llb666
 */
@Data
public class PreOrder {

    /**
     * 公众账号ID.
     */
    private String appid;

    /**
     * 商户号.
     */
    private String mch_id;

    /**
     * 随机字符串.
     */
    private String nonce_str;

    /**
     * 签名.
     */
    private String sign;

    /**
     * 商品描述.
     */
    private String body;

    /**
     * 商户订单号.
     */
    private String out_trade_no;

    /**
     * 订单总金额，单位为分.
     */
    private int total_fee;

    /**
     * APP和网页支付提交用户端ip，Native支付填调用微信支付API的机器IP.
     */
    private String spbill_create_ip;

    /**
     * 接收微信支付异步通知回调地址，通知url必须为直接可访问的url，不能携带参数.
     */
    private String notify_url;

    /**
     * 取值如下：JSAPI，NATIVE，APP.
     */
    private String trade_type;

    /**
     * 生成预付单对象.
     *
     * @param wxPayConfig 微信支付配置信息.
     * @param body        商品描述
     * @param nonce_str   随机字符串
     * @param outTradeNo  商户订单号
     * @param totalFee    订单总金额
     * @param sign        签名
     * @return 预付单对象
     */
    public static PreOrder createPreOrder(WXPayConfig wxPayConfig, String body, String nonce_str, String outTradeNo, String totalFee, String sign) {
        PreOrder preOrder = new PreOrder();
        preOrder.setNonce_str(nonce_str);
        preOrder.setSign(sign);
        preOrder.setBody(body);
        preOrder.setOut_trade_no(outTradeNo);
        preOrder.setAppid(wxPayConfig.getAppId());
        preOrder.setMch_id(wxPayConfig.getMerchantId());
        preOrder.setNotify_url(wxPayConfig.getNotifyUrl());
        preOrder.setTrade_type(wxPayConfig.getTradeType());
        preOrder.setSpbill_create_ip(wxPayConfig.getSpbillCreateIp());
        // 判断有没有输入订单总金额，没有输入默认1分钱
        if (totalFee != null && !"".equals(totalFee)) {
            preOrder.setTotal_fee(Integer.parseInt(totalFee));
        } else {
            preOrder.setTotal_fee(1);
        }
        return preOrder;
    }
}
